package ch10
{
	import flash.display.Sprite;
	import flash.events.Event;

	import utils.Ball;

	/**
	 * 多物体旋转.
	 * 如果物体要绕着某一点旋转，并且以物体本身的位置作为旋转的起点，那么下面给大家一个公式。
	 * 这个公式只需要给出物体距离中心点的相对 x,y 坐标和旋转的角度。它就会返回物体相对于中心点的新的坐标位置。
	 * 基本公式如下：
	 *  x1 = cos(angle) * x - sin(angle) * y;
	 *  y1 = cos(angle) * y + sin(angle) * x;
	 *
	 * @author sjp
	 *
	 */
	public class Rotate3 extends Sprite
	{
		private var balls:Array;
		private var vr:Number=0.1;
//		private var cos:Number=Math.cos(vr);
//		private var sin:Number=Math.sin(vr);
		private var numSprites:int=10;
		private var centerX:Number;
		private var centerY:Number;

		public function Rotate3()
		{
			init();
		}

		private function init():void
		{
			balls=[];
			centerX=stage.stageWidth / 2;
			centerY=stage.stageHeight / 2;
			for (var i:uint=0; i < numSprites; i++)
			{
				var ball:Ball=new Ball();
				addChild(ball);
				ball.x=Math.random() * stage.stageWidth;
				ball.y=Math.random() * stage.stageHeight;
				balls.push(ball);
			}
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}

		private function onEnterFrame(event:Event):void
		{
			/**
			 *  用鼠标位置控制多个物体旋转的速度。如果鼠标在屏幕中心，则不产生旋转。
			 *  如果鼠标向左移动，则物体逆时针旋转，并且越向左速度越快。如果向右移动，则顺时针旋转。
			 * */
			var angle:Number=(mouseX - centerX) * .001;
			var cos:Number=Math.cos(angle);
			var sin:Number=Math.sin(angle);
			var x1:Number;
			var y1:Number;
			var x2:Number;
			var y2:Number;
			for each (var ball:Ball in balls)
			{
				x1=ball.x - centerX;
				y1=ball.y - centerY;
				x2=cos * x1 - sin * y1;
				y2=cos * y1 + sin * x1;
				ball.x=centerX + x2;
				ball.y=centerY + y2;
			}

		}
	}
}